This page follows fastai’s quickstart page by quickly showing a few learning tasks. More will be added here as they are added to the library.
FastAI.jl’s learning tasks all use the same basic steps and code:
create a data container
create a learning task
create learner
call a fit task
make predictions or view results
In this quick start, we’ll show these steps for a wide range of difference applications and datasets. As you’ll see, the code in each case is extremely similar, despite the very different models and data being used.
import
CairoMakie
using
FastAI
data
,
blocks
=
loaddataset
(
"
imagenette2-320
"
,
(
Image
,
Label
)
)
task
=
ImageClassificationSingle
(
blocks
,
size
=
(
256
,
256
)
)
learner
=
tasklearner
(
task
,
data
,
callbacks
=
[
ToGPU
(
)
,
Metrics
(
accuracy
)
]
)
fitonecycle!
(
learner
,
5
,
0.033
)
Epoch 1 TrainingPhase(): 100%|██████████████████████████| Time: 0:04:25m
┌───────────────┬───────┬─────────┬──────────┐
│ Phase │ Epoch │ Loss │ Accuracy │
├───────────────┼───────┼─────────┼──────────┤
│ TrainingPhase │ 1.0 │ 1.97242 │ 0.39778 │
└───────────────┴───────┴─────────┴──────────┘
Epoch 1 ValidationPhase(): 100%|████████████████████████| Time: 0:00:14
┌─────────────────┬───────┬─────────┬──────────┐
│ Phase │ Epoch │ Loss │ Accuracy │
├─────────────────┼───────┼─────────┼──────────┤
│ ValidationPhase │ 1.0 │ 1.48969 │ 0.5269 │
└─────────────────┴───────┴─────────┴──────────┘
Epoch 2 TrainingPhase(): 100%|██████████████████████████| Time: 0:00:56
┌───────────────┬───────┬─────────┬──────────┐
│ Phase │ Epoch │ Loss │ Accuracy │
├───────────────┼───────┼─────────┼──────────┤
│ TrainingPhase │ 2.0 │ 1.32481 │ 0.57116 │
└───────────────┴───────┴─────────┴──────────┘
Epoch 2 ValidationPhase(): 100%|████████████████████████| Time: 0:00:05
┌─────────────────┬───────┬─────────┬──────────┐
│ Phase │ Epoch │ Loss │ Accuracy │
├─────────────────┼───────┼─────────┼──────────┤
│ ValidationPhase │ 2.0 │ 1.29609 │ 0.58396 │
└─────────────────┴───────┴─────────┴──────────┘
Epoch 3 TrainingPhase(): 100%|██████████████████████████| Time: 0:00:56
┌───────────────┬───────┬─────────┬──────────┐
│ Phase │ Epoch │ Loss │ Accuracy │
├───────────────┼───────┼─────────┼──────────┤
│ TrainingPhase │ 3.0 │ 1.07732 │ 0.65053 │
└───────────────┴───────┴─────────┴──────────┘
Epoch 3 ValidationPhase(): 100%|████████████████████████| Time: 0:00:04
┌─────────────────┬───────┬─────────┬──────────┐
│ Phase │ Epoch │ Loss │ Accuracy │
├─────────────────┼───────┼─────────┼──────────┤
│ ValidationPhase │ 3.0 │ 0.84394 │ 0.73269 │
└─────────────────┴───────┴─────────┴──────────┘
Epoch 4 TrainingPhase(): 100%|██████████████████████████| Time: 0:00:56
┌───────────────┬───────┬─────────┬──────────┐
│ Phase │ Epoch │ Loss │ Accuracy │
├───────────────┼───────┼─────────┼──────────┤
│ TrainingPhase │ 4.0 │ 0.76976 │ 0.75464 │
└───────────────┴───────┴─────────┴──────────┘
Epoch 4 ValidationPhase(): 100%|████████████████████████| Time: 0:00:04
┌─────────────────┬───────┬─────────┬──────────┐
│ Phase │ Epoch │ Loss │ Accuracy │
├─────────────────┼───────┼─────────┼──────────┤
│ ValidationPhase │ 4.0 │ 0.63991 │ 0.79958 │
└─────────────────┴───────┴─────────┴──────────┘
Epoch 5 TrainingPhase(): 100%|██████████████████████████| Time: 0:00:55
┌───────────────┬───────┬─────────┬──────────┐
│ Phase │ Epoch │ Loss │ Accuracy │
├───────────────┼───────┼─────────┼──────────┤
│ TrainingPhase │ 5.0 │ 0.54532 │ 0.82431 │
└───────────────┴───────┴─────────┴──────────┘
Epoch 5 ValidationPhase(): 100%|████████████████████████| Time: 0:00:04
┌─────────────────┬───────┬─────────┬──────────┐
│ Phase │ Epoch │ Loss │ Accuracy │
├─────────────────┼───────┼─────────┼──────────┤
│ ValidationPhase │ 5.0 │ 0.53793 │ 0.82539 │
└─────────────────┴───────┴─────────┴──────────┘
showoutputs
(
task
,
learner
)
data
,
blocks
=
loaddataset
(
"
pascal_2007
"
,
(
Image
,
LabelMulti
)
)
task
=
ImageClassificationMulti
(
blocks
)
learner
=
tasklearner
(
task
,
data
,
callbacks
=
[
ToGPU
(
)
,
Metrics
(
accuracy_thresh
)
]
)
fitonecycle!
(
learner
,
5
,
0.033
)
Epoch 1 TrainingPhase(): 100%|██████████████████████████| Time: 0:00:09
┌───────────────┬───────┬─────────┬─────────────────┐
│ Phase │ Epoch │ Loss │ Accuracy_thresh │
├───────────────┼───────┼─────────┼─────────────────┤
│ TrainingPhase │ 1.0 │ 0.36548 │ 0.8588 │
└───────────────┴───────┴─────────┴─────────────────┘
Epoch 1 ValidationPhase(): 100%|████████████████████████| Time: 0:00:01
┌─────────────────┬───────┬─────────┬─────────────────┐
│ Phase │ Epoch │ Loss │ Accuracy_thresh │
├─────────────────┼───────┼─────────┼─────────────────┤
│ ValidationPhase │ 1.0 │ 0.25181 │ 0.92066 │
└─────────────────┴───────┴─────────┴─────────────────┘
Epoch 2 TrainingPhase(): 100%|██████████████████████████| Time: 0:00:08
┌───────────────┬───────┬─────────┬─────────────────┐
│ Phase │ Epoch │ Loss │ Accuracy_thresh │
├───────────────┼───────┼─────────┼─────────────────┤
│ TrainingPhase │ 2.0 │ 0.23486 │ 0.92187 │
└───────────────┴───────┴─────────┴─────────────────┘
Epoch 2 ValidationPhase(): 100%|████████████████████████| Time: 0:00:00
┌─────────────────┬───────┬─────────┬─────────────────┐
│ Phase │ Epoch │ Loss │ Accuracy_thresh │
├─────────────────┼───────┼─────────┼─────────────────┤
│ ValidationPhase │ 2.0 │ 0.24972 │ 0.91715 │
└─────────────────┴───────┴─────────┴─────────────────┘
Epoch 3 TrainingPhase(): 100%|██████████████████████████| Time: 0:00:08
┌───────────────┬───────┬─────────┬─────────────────┐
│ Phase │ Epoch │ Loss │ Accuracy_thresh │
├───────────────┼───────┼─────────┼─────────────────┤
│ TrainingPhase │ 3.0 │ 0.22395 │ 0.92288 │
└───────────────┴───────┴─────────┴─────────────────┘
Epoch 3 ValidationPhase(): 100%|████████████████████████| Time: 0:00:00
┌─────────────────┬───────┬─────────┬─────────────────┐
│ Phase │ Epoch │ Loss │ Accuracy_thresh │
├─────────────────┼───────┼─────────┼─────────────────┤
│ ValidationPhase │ 3.0 │ 0.21873 │ 0.92184 │
└─────────────────┴───────┴─────────┴─────────────────┘
Epoch 4 TrainingPhase(): 100%|██████████████████████████| Time: 0:00:08
┌───────────────┬───────┬─────────┬─────────────────┐
│ Phase │ Epoch │ Loss │ Accuracy_thresh │
├───────────────┼───────┼─────────┼─────────────────┤
│ TrainingPhase │ 4.0 │ 0.20917 │ 0.92587 │
└───────────────┴───────┴─────────┴─────────────────┘
Epoch 4 ValidationPhase(): 100%|████████████████████████| Time: 0:00:00
┌─────────────────┬───────┬─────────┬─────────────────┐
│ Phase │ Epoch │ Loss │ Accuracy_thresh │
├─────────────────┼───────┼─────────┼─────────────────┤
│ ValidationPhase │ 4.0 │ 0.20198 │ 0.9268 │
└─────────────────┴───────┴─────────┴─────────────────┘
Epoch 5 TrainingPhase(): 100%|██████████████████████████| Time: 0:00:08
┌───────────────┬───────┬─────────┬─────────────────┐
│ Phase │ Epoch │ Loss │ Accuracy_thresh │
├───────────────┼───────┼─────────┼─────────────────┤
│ TrainingPhase │ 5.0 │ 0.19368 │ 0.929 │
└───────────────┴───────┴─────────┴─────────────────┘
Epoch 5 ValidationPhase(): 100%|████████████████████████| Time: 0:00:00
┌─────────────────┬───────┬─────────┬─────────────────┐
│ Phase │ Epoch │ Loss │ Accuracy_thresh │
├─────────────────┼───────┼─────────┼─────────────────┤
│ ValidationPhase │ 5.0 │ 0.19307 │ 0.92859 │
└─────────────────┴───────┴─────────┴─────────────────┘
showoutputs
(
task
,
learner
)
data
,
blocks
=
loaddataset
(
"
camvid_tiny
"
,
(
Image
,
Mask
)
)
task
=
ImageSegmentation
(
blocks
)
learner
=
tasklearner
(
task
,
data
,
callbacks
=
[
ToGPU
(
)
]
)
fitonecycle!
(
learner
,
10
,
0.1
)
Epoch 1 TrainingPhase(): 100%|██████████████████████████| Time: 0:00:01
┌───────────────┬───────┬────────┐
│ Phase │ Epoch │ Loss │
├───────────────┼───────┼────────┤
│ TrainingPhase │ 1.0 │ 3.5564 │
└───────────────┴───────┴────────┘
┌─────────────────┬───────┬─────────┐
│ Phase │ Epoch │ Loss │
├─────────────────┼───────┼─────────┤
│ ValidationPhase │ 1.0 │ 3.69546 │
└─────────────────┴───────┴─────────┘
Epoch 2 TrainingPhase(): 100%|██████████████████████████| Time: 0:00:02
┌───────────────┬───────┬─────────┐
│ Phase │ Epoch │ Loss │
├───────────────┼───────┼─────────┤
│ TrainingPhase │ 2.0 │ 3.07527 │
└───────────────┴───────┴─────────┘
┌─────────────────┬───────┬─────────┐
│ Phase │ Epoch │ Loss │
├─────────────────┼───────┼─────────┤
│ ValidationPhase │ 2.0 │ 161.498 │
└─────────────────┴───────┴─────────┘
Epoch 3 TrainingPhase(): 100%|██████████████████████████| Time: 0:00:02
┌───────────────┬───────┬─────────┐
│ Phase │ Epoch │ Loss │
├───────────────┼───────┼─────────┤
│ TrainingPhase │ 3.0 │ 2.51556 │
└───────────────┴───────┴─────────┘
┌─────────────────┬───────┬─────────┐
│ Phase │ Epoch │ Loss │
├─────────────────┼───────┼─────────┤
│ ValidationPhase │ 3.0 │ 70.3467 │
└─────────────────┴───────┴─────────┘
Epoch 4 TrainingPhase(): 100%|██████████████████████████| Time: 0:00:02
┌───────────────┬───────┬────────┐
│ Phase │ Epoch │ Loss │
├───────────────┼───────┼────────┤
│ TrainingPhase │ 4.0 │ 1.9643 │
└───────────────┴───────┴────────┘
┌─────────────────┬───────┬─────────┐
│ Phase │ Epoch │ Loss │
├─────────────────┼───────┼─────────┤
│ ValidationPhase │ 4.0 │ 4.44282 │
└─────────────────┴───────┴─────────┘
Epoch 5 TrainingPhase(): 100%|██████████████████████████| Time: 0:00:02
┌───────────────┬───────┬─────────┐
│ Phase │ Epoch │ Loss │
├───────────────┼───────┼─────────┤
│ TrainingPhase │ 5.0 │ 1.77354 │
└───────────────┴───────┴─────────┘
┌─────────────────┬───────┬─────────┐
│ Phase │ Epoch │ Loss │
├─────────────────┼───────┼─────────┤
│ ValidationPhase │ 5.0 │ 2.79239 │
└─────────────────┴───────┴─────────┘
Epoch 6 TrainingPhase(): 100%|██████████████████████████| Time: 0:00:02
┌───────────────┬───────┬─────────┐
│ Phase │ Epoch │ Loss │
├───────────────┼───────┼─────────┤
│ TrainingPhase │ 6.0 │ 1.70444 │
└───────────────┴───────┴─────────┘
┌─────────────────┬───────┬─────────┐
│ Phase │ Epoch │ Loss │
├─────────────────┼───────┼─────────┤
│ ValidationPhase │ 6.0 │ 2.10786 │
└─────────────────┴───────┴─────────┘
Epoch 7 TrainingPhase(): 100%|██████████████████████████| Time: 0:00:01
┌───────────────┬───────┬─────────┐
│ Phase │ Epoch │ Loss │
├───────────────┼───────┼─────────┤
│ TrainingPhase │ 7.0 │ 1.66732 │
└───────────────┴───────┴─────────┘
┌─────────────────┬───────┬─────────┐
│ Phase │ Epoch │ Loss │
├─────────────────┼───────┼─────────┤
│ ValidationPhase │ 7.0 │ 1.80765 │
└─────────────────┴───────┴─────────┘
Epoch 8 TrainingPhase(): 100%|██████████████████████████| Time: 0:00:02
┌───────────────┬───────┬─────────┐
│ Phase │ Epoch │ Loss │
├───────────────┼───────┼─────────┤
│ TrainingPhase │ 8.0 │ 1.64187 │
└───────────────┴───────┴─────────┘
┌─────────────────┬───────┬─────────┐
│ Phase │ Epoch │ Loss │
├─────────────────┼───────┼─────────┤
│ ValidationPhase │ 8.0 │ 1.74117 │
└─────────────────┴───────┴─────────┘
Epoch 9 TrainingPhase(): 100%|██████████████████████████| Time: 0:00:02
┌───────────────┬───────┬─────────┐
│ Phase │ Epoch │ Loss │
├───────────────┼───────┼─────────┤
│ TrainingPhase │ 9.0 │ 1.60915 │
└───────────────┴───────┴─────────┘
┌─────────────────┬───────┬─────────┐
│ Phase │ Epoch │ Loss │
├─────────────────┼───────┼─────────┤
│ ValidationPhase │ 9.0 │ 1.69404 │
└─────────────────┴───────┴─────────┘
Epoch 10 TrainingPhase(): 100%|█████████████████████████| Time: 0:00:02
┌───────────────┬───────┬─────────┐
│ Phase │ Epoch │ Loss │
├───────────────┼───────┼─────────┤
│ TrainingPhase │ 10.0 │ 1.61496 │
└───────────────┴───────┴─────────┘
┌─────────────────┬───────┬────────┐
│ Phase │ Epoch │ Loss │
├─────────────────┼───────┼────────┤
│ ValidationPhase │ 10.0 │ 1.6875 │
└─────────────────┴───────┴────────┘
showoutputs
(
task
,
learner
)
data
,
blocks
=
loaddataset
(
"
adult_sample
"
,
(
TableRow
,
Label
)
)
task
=
TabularClassificationSingle
(
blocks
,
data
)
learner
=
tasklearner
(
task
,
data
;
callbacks
=
[
Metrics
(
accuracy
)
]
,
batchsize
=
128
)
fitonecycle!
(
learner
,
3
,
0.2
)
┌ Warning: There is a missing value present for category 'occupation' which will be removed from Categorify dict
└ @ DataAugmentation /home/lorenz/.julia/dev/DataAugmentation/src/rowtransforms.jl:108
Epoch 1 TrainingPhase(): 100%|██████████████████████████| Time: 0:00:03
┌───────────────┬───────┬────────┬──────────┐
│ Phase │ Epoch │ Loss │ Accuracy │
├───────────────┼───────┼────────┼──────────┤
│ TrainingPhase │ 1.0 │ 0.3823 │ 0.82343 │
└───────────────┴───────┴────────┴──────────┘
┌─────────────────┬───────┬─────────┬──────────┐
│ Phase │ Epoch │ Loss │ Accuracy │
├─────────────────┼───────┼─────────┼──────────┤
│ ValidationPhase │ 1.0 │ 0.31932 │ 0.85017 │
└─────────────────┴───────┴─────────┴──────────┘
Epoch 2 TrainingPhase(): 100%|██████████████████████████| Time: 0:00:03
┌───────────────┬───────┬─────────┬──────────┐
│ Phase │ Epoch │ Loss │ Accuracy │
├───────────────┼───────┼─────────┼──────────┤
│ TrainingPhase │ 2.0 │ 0.34991 │ 0.83775 │
└───────────────┴───────┴─────────┴──────────┘
┌─────────────────┬───────┬─────────┬──────────┐
│ Phase │ Epoch │ Loss │ Accuracy │
├─────────────────┼───────┼─────────┼──────────┤
│ ValidationPhase │ 2.0 │ 0.37026 │ 0.83396 │
└─────────────────┴───────┴─────────┴──────────┘
Epoch 3 TrainingPhase(): 100%|██████████████████████████| Time: 0:00:03
┌───────────────┬───────┬─────────┬──────────┐
│ Phase │ Epoch │ Loss │ Accuracy │
├───────────────┼───────┼─────────┼──────────┤
│ TrainingPhase │ 3.0 │ 0.32316 │ 0.85015 │
└───────────────┴───────┴─────────┴──────────┘
Epoch 3 ValidationPhase(): 100%|████████████████████████| Time: 0:00:00
┌─────────────────┬───────┬─────────┬──────────┐
│ Phase │ Epoch │ Loss │ Accuracy │
├─────────────────┼───────┼─────────┼──────────┤
│ ValidationPhase │ 3.0 │ 0.30751 │ 0.85229 │
└─────────────────┴───────┴─────────┴──────────┘
showoutputs
(
task
,
learner
,
backend
=
ShowText
(
)
)
┌─────────────────────────────────────────────────────────────┬──────────────────────────────────┐
│ Encoded sample │ Output │
├─────────────────────────────────────────────────────────────┼──────────────────────────────────┤
│ ┌──────────────────────┬──────────────────────────────────┐ │ ┌ ┐ │
│ │ EncodedTableRow(...) │ ┌ ┐ │ │ >=50k ┤■■■■■■■■■■■■■ 0.701 │
│ │ │ >=50k ┤■■■■■■■■■■■■■■■ 1.0 │ │ <50k ┤■■■■■■ 0.299 │
│ │ │ <50k ┤ 0.0 │ │ └ ┘ │
│ │ │ └ ┘ │ │ │
│ └──────────────────────┴──────────────────────────────────┘ │ │
│ │ │
├─────────────────────────────────────────────────────────────┼──────────────────────────────────┤
│ ┌──────────────────────┬──────────────────────────────────┐ │ ┌ ┐ │
│ │ EncodedTableRow(...) │ ┌ ┐ │ │ >=50k ┤■■ 0.117 │
│ │ │ >=50k ┤ 0.0 │ │ <50k ┤■■■■■■■■■■■■■ 0.883 │
│ │ │ <50k ┤■■■■■■■■■■■■■■■ 1.0 │ │ └ ┘ │
│ │ │ └ ┘ │ │ │
│ └──────────────────────┴──────────────────────────────────┘ │ │
│ │ │
├─────────────────────────────────────────────────────────────┼──────────────────────────────────┤
│ ┌──────────────────────┬──────────────────────────────────┐ │ ┌ ┐ │
│ │ EncodedTableRow(...) │ ┌ ┐ │ │ >=50k ┤■ 0.0429 │
│ │ │ >=50k ┤ 0.0 │ │ <50k ┤■■■■■■■■■■■■■ 0.957 │
│ │ │ <50k ┤■■■■■■■■■■■■■■■ 1.0 │ │ └ ┘ │
│ │ │ └ ┘ │ │ │
│ └──────────────────────┴──────────────────────────────────┘ │ │
│ │ │
├─────────────────────────────────────────────────────────────┼──────────────────────────────────┤
│ ┌──────────────────────┬──────────────────────────────────┐ │ ┌ ┐ │
│ │ EncodedTableRow(...) │ ┌ ┐ │ │ >=50k ┤ 0.0141 │
│ │ │ >=50k ┤ 0.0 │ │ <50k ┤■■■■■■■■■■■■■ 0.986 │
│ │ │ <50k ┤■■■■■■■■■■■■■■■ 1.0 │ │ └ ┘ │
│ │ │ └ ┘ │ │ │
│ └──────────────────────┴──────────────────────────────────┘ │ │
│ │ │
└─────────────────────────────────────────────────────────────┴──────────────────────────────────┘
The following pages link back here: